/*
 * lista.cpp
 *
 *  Created on: 20/09/2011
 *      Author: guido
 */

#include "lista.h"

ListaHabitaciones::ListaHabitaciones() {
	raiz = NULL;
}

ListaHabitaciones::~ListaHabitaciones() {
	NodoHabitacion* actual = raiz;
	while (actual != NULL) {
		NodoHabitacion* nodo = actual;
		actual = actual->getSiguiente();
		Habitacion* habitacion = nodo->getHabitacion();
		delete nodo;
		delete habitacion;
	}
}

void ListaHabitaciones::agregar(Habitacion habitacion) {
	NodoHabitacion* nuevo = new NodoHabitacion(habitacion);
	if (this->raiz == NULL
	)
		this->raiz = nuevo;
	else {
		NodoHabitacion* actual = raiz;
		while (actual->getSiguiente() != NULL) {
			actual = actual->getSiguiente();
		}
		actual->setSiguiente(nuevo);
	}
}

Habitacion *ListaHabitaciones::getHabitacion(int numero) {
	bool encontrado = false;
	NodoHabitacion* actual = raiz;
	while ((actual != NULL) && !(encontrado)) {
		if (actual->getHabitacion()->getNumero() == numero) {
			encontrado = true;
		} else {
			actual = actual->getSiguiente();
		}
	}
	return actual->getHabitacion();
}

Habitacion ListaHabitaciones::quitarHabitacion(int numero) {
	bool encontrado = false;
	NodoHabitacion* anterior = NULL;
	NodoHabitacion* actual = raiz;
	Habitacion* habitacion = 0;
	while ((actual != NULL) && (!encontrado)) {
		if (actual->getHabitacion()->getNumero() == numero) {
			encontrado = true;
			habitacion = actual->getHabitacion();
			if (anterior == NULL) {
				raiz = actual->getSiguiente();
			} else {
				anterior->setSiguiente(actual->getSiguiente());
			}
		} else {
			anterior = actual;
			actual = actual->getSiguiente();
		}
	}
	Habitacion resultado(*habitacion);
	if (actual != NULL) {
		delete actual;
		delete habitacion;
	}
	return resultado;
}

bool ListaHabitaciones::buscar(int numero) {
	bool encontrado = false;
	NodoHabitacion* actual = raiz;
	while ((actual != NULL) && !(encontrado)) {
		if (actual->getHabitacion()->getNumero() == numero) {
			encontrado = true;
		} else {
			actual = actual->getSiguiente();
		}
	}
	return encontrado;
}

